package file

///
// 本地文件缓存库
///
import (
	"os"

	httplib ".."
	library "../.."
)

// Data 文件数据对象
type Data struct {
	F *os.File // 文件
}

// Read 读文件
func (B *Data) Read(b []byte) (int, error) {
	return B.F.Read(b)
}

// Write 写文件
func (B *Data) Write(b []byte) (int, error) {
	return B.F.Write(b)
}

// Close 关闭
func (B *Data) Close() error {
	return B.F.Close()
}

// File 文件对象
type File struct{ Create bool }

// PathExists 文件是否存在
func (F *File) PathExists(path string) (bool, error) {
	return library.PathExists(path)
}

// Open 打开文件
func (F *File) Open(path string) (httplib.FileData, error) {
	var (
		file httplib.FileData
		f    *os.File
		err  error
	)
	// 打开文件
	if F.Create {
		f, err = os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0600)
		if err != nil {
			return nil, err
		}
	} else {
		f, err = os.OpenFile(path, os.O_RDWR, 0600)
		if err != nil {
			return nil, err
		}
	}
	// 设置数据
	file = &Data{f}
	return file, nil
}

// SetUp 创建
// 	path 	路径
//	timeOut	超时/S
//	MaxSize 缓存大小
func SetUp(path string, timeOut int64, MaxSize uint64) (B *Buffer) {
	B = BufferInit(path, timeOut, MaxSize)
	B.FileManagement = &File{}
	return
}
